package datamodule;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import util.FData;
import util.FString;
import conexao.Connect;

public class EventosDAO {

	private DBuserVO userVO;

	public EventosDAO( DBuserVO userVO){
		this.userVO = userVO;
	}

	//Inserir Eventos
	public int inserir(EventosVO VOeve) throws ClassNotFoundException, SQLException {
		Connection con = Connect.getConnection(userVO);
		PreparedStatement pstmtInsert = con.prepareStatement(
				"INSERT INTO eventos(eve_Cod_Eve, nev_Cod_Nev, igr_Cod_Igreja, eve_Pontos_Av, " +
				" bro_Cod_Membro, eve_Data_Av, eve_HE, eve_HS, eve_Periodo ) "+ 
				" VALUES(?,?,?,?,?,?,?,?,?) ");
		pstmtInsert.setString(1, VOeve.getEve_Cod_Eve().equals(FString.ignorar)   ?"":VOeve.getEve_Cod_Eve());			
		pstmtInsert.setString(2, VOeve.getNev_Cod_Nev().equals(FString.ignorar)   ?"":VOeve.getNev_Cod_Nev());
		pstmtInsert.setString(3, VOeve.getIgr_Cod_Igreja().equals(FString.ignorar)?"":VOeve.getIgr_Cod_Igreja());
		pstmtInsert.setString(4, VOeve.getEve_Pontos_Av().equals(FString.ignorar) ?"":VOeve.getEve_Pontos_Av());
		pstmtInsert.setString(5, VOeve.getBro_Cod_Membro().equals(FString.ignorar)?"":VOeve.getBro_Cod_Membro());
		pstmtInsert.setString(6, VOeve.getEve_Data_Av() == FData.ignorarD         ?"":VOeve.getEve_Data_Av_SQL());
		pstmtInsert.setString(7, VOeve.getEve_HE().equals(FString.ignorar)        ?"":VOeve.getEve_HE());
		pstmtInsert.setString(8, VOeve.getEve_HS().equals(FString.ignorar)        ?"":VOeve.getEve_HS());
		pstmtInsert.setString(9, VOeve.getEve_Periodo().equals(FString.ignorar)   ?"":VOeve.getEve_Periodo());
		
		int reg = pstmtInsert.executeUpdate();	
		con.close();
		return reg;
	}

	//Alterar Eventos
	public int alterar(EventosVO VOeve) throws ClassNotFoundException, SQLException {
		Connection con = Connect.getConnection(userVO);
		String virgula = "";
		StringBuffer sql = new StringBuffer(" UPDATE eventos SET ");
		if (!VOeve.getEve_Cod_Eve().equals(FString.ignorar)) {
			sql.append(virgula+" eve_Cod_Eve = '"+VOeve.getEve_Cod_Eve()+"' ");
			virgula = ",";
		}
		if (!VOeve.getNev_Cod_Nev().equals(FString.ignorar)) {
			sql.append(virgula+" nev_Cod_Nev = '"+VOeve.getNev_Cod_Nev()+"' ");
			virgula = ",";
		}
		if (!VOeve.getIgr_Cod_Igreja().equals(FString.ignorar)) {
			sql.append(virgula+" igr_Cod_Igreja = '"+VOeve.getIgr_Cod_Igreja()+"' ");
			virgula = ",";
		}
		if (!VOeve.getEve_Pontos_Av().equals(FString.ignorar)) {
			sql.append(virgula+" eve_Pontos_Av = '"+VOeve.getEve_Pontos_Av()+"' ");
			virgula = ",";
		}
		if (!VOeve.getBro_Cod_Membro().equals(FString.ignorar)) {
			sql.append(virgula+" bro_Cod_Membro = '"+VOeve.getBro_Cod_Membro()+"' ");
			virgula = ",";
		}
		if (VOeve.getEve_Data_Av() != FData.ignorarD) {
			sql.append(virgula+" eve_Data_Av = '"+VOeve.getEve_Data_Av_SQL()+"' ");
			virgula = ",";
		}
		if (!VOeve.getEve_HE().equals(FString.ignorar)) {
			sql.append(virgula+" eve_HE = '"+VOeve.getEve_HE()+"' ");
			virgula = ",";
		}	
		
		if (!VOeve.getEve_HS().equals(FString.ignorar)) {
			sql.append(virgula+" eve_HS = '"+VOeve.getEve_HS()+"' ");
			virgula = ",";
		}	
		
		if (!VOeve.getEve_Periodo().equals(FString.ignorar)) {
			sql.append(virgula+" eve_Periodo = '"+VOeve.getEve_Periodo()+"' ");
			virgula = ",";
		}	

		
		sql.append(" WHERE eve_Cod_Eve = '"+VOeve.getEve_Cod_Eve()+"' ");
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0, sql.length()));
		int registrosAfetados = pstmt.executeUpdate();
		con.close();
		return registrosAfetados;
	}	
	
	// Deletar Eventos
	public int deletar(EventosVO VOeve) throws ClassNotFoundException, SQLException {		
		Connection con = Connect.getConnection(userVO);
		PreparedStatement pstmt = con.prepareStatement(
		"DELETE FROM eventos WHERE eve_Cod_Eve = ?");
		pstmt.setString(1, VOeve.getEve_Cod_Eve());
		int registrosAfetados = pstmt.executeUpdate();
		con.close();
		return registrosAfetados;
	}

	//Pesquisar Eventos
	public EventosVO pesquisar(EventosVO VOeve) throws ClassNotFoundException, SQLException {				
		Connection con = Connect.getConnection(userVO);
		StringBuffer sql = new StringBuffer("SELECT * FROM eventos Where eve_Cod_Eve <> '' ");
		
		if (!VOeve.getNev_Cod_Nev().equals(FString.ignorar)) {
			sql.append(" AND UPPER(nev_Cod_Nev) = '"+VOeve.getNev_Cod_Nev()+"' ");			
		}		
		if (!VOeve.getBro_Cod_Membro().equals(FString.ignorar)) {
			sql.append(" AND UPPER(bro_Cod_Membro) = '"+VOeve.getBro_Cod_Membro()+"' ");			
		}
		if (VOeve.getEve_Data_Av() != FData.ignorarD) {
			sql.append(" AND eve_Data_Av = '"+VOeve.getEve_Data_Av_SQL()+"' ");			
		}
		if (!VOeve.getIgr_Cod_Igreja().equals(FString.ignorar)) {
			sql.append(" AND UPPER(igr_Cod_Igreja) = '"+VOeve.getIgr_Cod_Igreja()+"' ");			
		}
		if (!VOeve.getEve_Periodo().equals(FString.ignorar)) {
			sql.append(" AND UPPER(eve_Periodo) = '"+VOeve.getEve_Periodo()+"' ");			
		}

		System.out.println(sql);
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0,sql.length()));		
		ResultSet rs = pstmt.executeQuery();
		if (rs.next()) {
			VOeve = new EventosVO();
			VOeve.setEve_Cod_Eve   ( rs.getString("eve_Cod_Eve"));
			VOeve.setNev_Cod_Nev   ( rs.getString("nev_Cod_Nev"));
			VOeve.setIgr_Cod_Igreja( rs.getString("igr_Cod_Igreja"));
			VOeve.setEve_Pontos_Av ( rs.getString("eve_Pontos_Av"));       
			VOeve.setBro_Cod_Membro( rs.getString("bro_Cod_Membro"));
			VOeve.setEve_Data_Av   ( rs.getDate  ("eve_Data_Av"));   
			VOeve.setEve_HE        ( rs.getString("eve_HE"));
			VOeve.setEve_HS        ( rs.getString("eve_HS"));
			VOeve.setEve_Periodo   ( rs.getString("eve_Periodo"));
		}else {
			VOeve = null;
		}
		pstmt.close();
		rs.close();
		con.close();
		return VOeve;
	}

	public ArrayList<EventosVO> geral(EventosVO VOeve) throws SQLException, ClassNotFoundException {		
		ArrayList<EventosVO> lista = null;
		Connection con = Connect.getConnection(userVO);
		StringBuffer sql = new StringBuffer("SELECT e.*, m.bro_Nome, i.igr_Descricao, n.nev_Descricao "+
				                            "FROM eventos e "+
				            				" LEFT OUTER JOIN membros m ON m.bro_Cod_Membro = e.bro_Cod_membro " +
				            				" LEFT OUTER JOIN igrejas i ON i.igr_Cod_Igreja = e.igr_Cod_Igreja " +
				            				" LEFT OUTER JOIN nevento n ON n.nev_Cod_Nev    = e.nev_Cod_Nev "+
				                            "Where e.nev_Cod_Nev <> '' ");
		if (!VOeve.getNev_Cod_Nev().equals(FString.ignorar)) {
			sql.append(" AND UPPER(e.nev_Cod_Nev) LIKE UPPER('"+VOeve.getNev_Cod_Nev()+"')");
		}
		if (!VOeve.getIgr_Cod_Igreja().equals(FString.ignorar) && !VOeve.getIgr_Cod_Igreja().isEmpty()) {
			sql.append(" AND UPPER(e.igr_Cod_Igreja) = ('"+VOeve.getIgr_Cod_Igreja()+"')");
		}	
		
		if (VOeve.getEve_Data_Av()  != FData.ignorarD && !VOeve.getEve_Data_Av_SQL().equals(FData.dataDefaultSQL())) {
			sql.append(" AND e.eve_Data_Av = '"+ VOeve.getEve_Data_Av_SQL()+"' ");
		}
		if (!VOeve.getBro_Cod_Membro().equals(FString.ignorar) && !VOeve.getBro_Cod_Membro().isEmpty()) {
			sql.append(" AND UPPER(e.bro_Cod_Membro) = ('"+VOeve.getBro_Cod_Membro()+"')");
		}
		
		
		if (!VOeve.getOrdem().equals(FString.ignorar) && !VOeve.getOrdem().isEmpty()) {
			sql.append(" ORDER BY "+VOeve.getOrdem());
		}
		if (!VOeve.getLimit().equals(FString.ignorar)) {
			sql.append(" LIMIT "+VOeve.getLimit());
		}
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0,sql.length()));
		System.out.println(pstmt);
		ResultSet rs = pstmt.executeQuery();
		if (rs.next()) {
			lista = new ArrayList<EventosVO>();
			do {
				EventosVO nev = new EventosVO();
				nev.setEve_Cod_Eve   ( rs.getString("eve_Cod_Eve"));
				nev.setNev_Cod_Nev   ( rs.getString("nev_Cod_Nev"));
				nev.setIgr_Cod_Igreja( rs.getString("igr_Cod_Igreja"));
				nev.setEve_Pontos_Av ( rs.getString("eve_Pontos_Av"));
				nev.setBro_Cod_Membro( rs.getString("bro_Cod_Membro"));
				nev.setEve_Data_Av   ( rs.getDate  ("eve_Data_Av"));
				nev.setEve_HE        ( rs.getString("eve_HE"));
				nev.setEve_HS        ( rs.getString("eve_HS"));
				nev.setEve_Periodo   ( rs.getString("eve_Periodo"));
				nev.setBro_Nome      ( rs.getString("bro_Nome"));
				nev.setIgr_Descricao ( rs.getString("igr_Descricao"));
				nev.setNev_Descricao ( rs.getString("nev_Descricao"));
				
				lista.add(nev);
			}
			while (rs.next());			
		}
		pstmt.close();
		rs.close();
		con.close();
		return lista;
	}	

	public ArrayList<EventosVO> geralFechamentoEvento(EventosVO VOeve) throws SQLException, ClassNotFoundException {		
		ArrayList<EventosVO> lista = null;
		Connection con = Connect.getConnection(userVO);
		StringBuffer sql = new StringBuffer("SELECT e.*, m.bro_Nome, i.igr_Descricao, n.nev_Descricao "+
				                            "FROM eventos e "+
				            				" LEFT OUTER JOIN membros m ON m.bro_Cod_Membro = e.bro_Cod_membro " +
				            				" LEFT OUTER JOIN igrejas i ON i.igr_Cod_Igreja = e.igr_Cod_Igreja " +
				            				" LEFT OUTER JOIN nevento n ON n.nev_Cod_Nev    = e.nev_Cod_Nev "+
				                            "Where e.nev_Cod_Nev <> '' AND i.igr_Dirigente = e.bro_Cod_membro");
		if (!VOeve.getNev_Cod_Nev().equals(FString.ignorar)) {
			sql.append(" AND UPPER(e.nev_Cod_Nev) LIKE UPPER('"+VOeve.getNev_Cod_Nev()+"')");
		}
		if (!VOeve.getIgr_Cod_Igreja().equals(FString.ignorar) && !VOeve.getIgr_Cod_Igreja().isEmpty()) {
			sql.append(" AND UPPER(e.igr_Cod_Igreja) = ('"+VOeve.getIgr_Cod_Igreja()+"')");
		}	
		
		if (VOeve.getEve_Data_Av()  != FData.ignorarD && !VOeve.getEve_Data_Av_SQL().equals(FData.dataDefaultSQL())) {
			sql.append(" AND e.eve_Data_Av = '"+ VOeve.getEve_Data_Av_SQL()+"' ");
		}
		if (!VOeve.getBro_Cod_Membro().equals(FString.ignorar) && !VOeve.getBro_Cod_Membro().isEmpty()) {
			sql.append(" AND UPPER(e.bro_Cod_Membro) = ('"+VOeve.getBro_Cod_Membro()+"')");
		}
		sql.append(" GROUP BY e.bro_Cod_membro ");
		if (!VOeve.getOrdem().equals(FString.ignorar) && !VOeve.getOrdem().isEmpty()) {
			sql.append(" ORDER BY "+VOeve.getOrdem());
		}
		if (!VOeve.getLimit().equals(FString.ignorar)) {
			sql.append(" LIMIT "+VOeve.getLimit());
		}
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0,sql.length()));
		System.out.println(pstmt);
		ResultSet rs = pstmt.executeQuery();
		if (rs.next()) {
			lista = new ArrayList<EventosVO>();
			do {
				EventosVO nev = new EventosVO();
				nev.setEve_Cod_Eve   ( rs.getString("eve_Cod_Eve"));
				nev.setNev_Cod_Nev   ( rs.getString("nev_Cod_Nev"));
				nev.setIgr_Cod_Igreja( rs.getString("igr_Cod_Igreja"));
				nev.setEve_Pontos_Av ( rs.getString("eve_Pontos_Av"));
				nev.setBro_Cod_Membro( rs.getString("bro_Cod_Membro"));
				nev.setEve_Data_Av   ( rs.getDate  ("eve_Data_Av"));
				nev.setEve_HE        ( rs.getString("eve_HE"));
				nev.setEve_HS        ( rs.getString("eve_HS"));
				nev.setEve_Periodo   ( rs.getString("eve_Periodo"));
				nev.setBro_Nome      ( rs.getString("bro_Nome"));
				nev.setIgr_Descricao ( rs.getString("igr_Descricao"));
				nev.setNev_Descricao ( rs.getString("nev_Descricao"));
				
				lista.add(nev);
			}
			while (rs.next());			
		}
		pstmt.close();
		rs.close();
		con.close();
		return lista;
	}	

	public ResultSet listagem(EventosVO VOeve, Connection con) throws SQLException, ClassNotFoundException {		
		StringBuffer sql = new StringBuffer("SELECT "+
		" eventos.`eve_Cod_Eve` AS eventos_eve_Cod_Eve, "+
		" eventos.`nev_Cod_Nev` AS eventos_nev_Cod_Nev, "+
		" eventos.`eve_Pontos_Av` AS eventos_eve_Pontos_Av, "+
		" eventos.`bro_Cod_Membro` AS eventos_bro_Cod_Membro, "+
		" eventos.`igr_Cod_Igreja` AS eventos_igr_Cod_Igreja, "+
		" eventos.`eve_Data_Av` AS eventos_eve_Data_Av, "+
		" eventos.`eve_HE` AS eventos_eve_HE, "+
		" eventos.`eve_HS` AS eventos_eve_HS, "+
		" eventos.`eve_Periodo` AS eventos_eve_Periodo, "+
		" nevento.`nev_Descricao` AS nevento_nev_Descricao, "+
		" membros.`bro_Nome` AS membros_bro_Nome, "+
		" igrejas.`igr_Descricao` AS igrejas_igr_Descricao, "+
		" nevento.`reg_Item` AS nevento_reg_Item "+
		" FROM  `nevento` nevento INNER JOIN `eventos` eventos ON nevento.`nev_Cod_Nev` = eventos.`nev_Cod_Nev` "+
		"	   INNER JOIN `membros` membros ON eventos.`bro_Cod_Membro` = membros.`bro_Cod_Membro` "+
		"	   INNER JOIN `igrejas` igrejas ON eventos.`igr_Cod_Igreja` = igrejas.`igr_Cod_Igreja` "+				
		" WHERE  eventos.`eve_Cod_Eve` <> '' ");		

		if (!VOeve.getEve_Cod_Eve().equals(FString.ignorar) && !VOeve.getEve_Cod_Eve().isEmpty()) {
			sql.append(" AND UPPER(eventos.`eve_Cod_Eve`) = '"+VOeve.getEve_Cod_Eve()+"'");			
		}		
		if (!VOeve.getNev_Cod_Nev().equals(FString.ignorar) && !VOeve.getNev_Cod_Nev().isEmpty()) {
			sql.append(" AND UPPER(eventos.`nev_Cod_Nev`) = '"+VOeve.getNev_Cod_Nev()+"'");			
		}

		if (!VOeve.getIgr_Cod_Igreja().equals(FString.ignorar) && !VOeve.getIgr_Cod_Igreja().isEmpty()) {
			sql.append(" AND UPPER(eventos.`igr_Cod_Igreja`) = '"+VOeve.getIgr_Cod_Igreja()+"'");
		}
		
		if (VOeve.getEve_Data_Av()  != (FData.ignorarD) && !VOeve.getEve_Data_Av_SQL().equals(FData.dataDefaultSQL())) {
			sql.append(" AND UPPER(eventos.`eve_Data_Av`) = '"+ VOeve.getEve_Data_Av_SQL()+"'");
		}
		
		if (!VOeve.getBro_Cod_Membro().equals(FString.ignorar) && !VOeve.getBro_Cod_Membro().isEmpty()) {
			sql.append(" AND UPPER(eventos.`bro_Cod_Membro`) = '"+VOeve.getBro_Cod_Membro()+"'");
		}
		

		if (!VOeve.getOrdem().equals(FString.ignorar) && !VOeve.getOrdem().isEmpty()) {
			sql.append(" ORDER BY "+VOeve.getOrdem());
		}
		if (!VOeve.getLimit().equals(FString.ignorar)) {
			sql.append(" LIMIT "+VOeve.getLimit());
		}
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0,sql.length()));
		System.out.println(pstmt);
		ResultSet rs = pstmt.executeQuery();
		return rs;
	}	
		
}